package com.huluobo.lib_base.net

import android.content.Context
import androidx.room.Room
import com.huluobo.lib_base.db.DouYinDatabase
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

/**
 *  Created by LC on 2025/9/13.
 *  对外提供网络请求的api  hilt对外提供ApiService的核心方法
 *  @Module 代表当前类是一个Hilt的模块
 *  @InstallIn(SingletonComponent::class) 代表当前类安装或者实例时是一个单例模式
 *  @Provides 代表当前方法的返回值是对外提供的
 *  @Singleton 代表当前方法的返回值是单例的
 *
 *  hilt自动对外提供对象,关键的位置就在方法的返回值
 *  自动对外提供ApiServce的实例
 *  自动对外提供Room数据库的实例
 */
@Module
@InstallIn(SingletonComponent::class)
object ProviderFactory {
    @Provides
    @Singleton
    fun service(): ApiService = getService()

    @Provides
    @Singleton
    fun database(@ApplicationContext app: Context): DouYinDatabase =
        Room.databaseBuilder(app, DouYinDatabase::class.java, "douyin.db")
            //允许主线程查询
            .allowMainThreadQueries().build()

}